Reactã®è©Šéšçãª`use`ããã¯ã«ã€ããŠæ¢ããŸãããªãœãŒã¹ååŸãããŒã¿äŸåé¢ä¿ãã³ã³ããŒãã³ãã¬ã³ããªã³ã°ã驿°ããããã©ãŒãã³ã¹ãšéçºè äœéšãåäžãããæ¹æ³ãåŠã³ãŸãããã
React詊éšç`use`ããã¯ã®å®è£ ïŒåŒ·åããããªãœãŒã¹ãã³ããªã³ã°ã®å®çŸ
ReactããŒã ã¯ãããã³ããšã³ãéçºã§å¯èœãªããšã®éçãåžžã«æŒãåºããŠãããæè¿ã®æããšããµã€ãã£ã³ã°ãªé²æ©ã®äžã€ãã詊éšçãª`use`ããã¯ã§ãããã®ããã¯ã¯ãéåæããŒã¿ååŸã®æ±ãæ¹ãäŸåé¢ä¿ã®ç®¡çãã³ã³ããŒãã³ãã¬ã³ããªã³ã°ã®èª¿æŽæ¹æ³ã«é©åœãããããããšãæåŸ ãããŠããŸãããŸã è©Šéšæ®µéã§ã¯ãããŸããã`use`ãšãã®æœåšçãªå©ç¹ãçè§£ããããšã¯ãæä»£ã®æå 端ãè¡ããããšèãããã¹ãŠã®Reactéçºè ã«ãšã£ãŠäžå¯æ¬ ã§ãããã®å æ¬çãªã¬ã€ãã§ã¯ã`use`ããã¯ã®è€éãã«æ·±ãå ¥ã蟌ã¿ããã®ç®çãå®è£ ãå©ç¹ããããŠæœåšçãªæ¬ ç¹ãæ¢ããŸãã
Reactã®è©Šéšçãª`use`ããã¯ãšã¯äœãïŒ
`use`ããã¯ã¯ãReactã®è©Šéšçãã£ãã«ã§å°å ¥ãããæ°ããããªããã£ãã§ãããç¹ã«éåæããŒã¿ãæ±ãéã®ããŒã¿ååŸãšäŸåé¢ä¿ç®¡çãç°¡çŽ åããããã«èšèšãããŠããŸããããã«ãããReactã³ã³ããŒãã³ãå ã§çŽæ¥Promiseããawaitãããããšãã§ããããŒãã£ã³ã°ç¶æ ããšã©ãŒæ¡ä»¶ãæ±ãããã®ãããå¹ççã§å®£èšçãªã¢ãããŒããå¯èœã«ãªããŸãã
æŽå²çã«ãReactã§ã®ããŒã¿ååŸã¯ã©ã€ããµã€ã¯ã«ã¡ãœããïŒã¯ã©ã¹ã³ã³ããŒãã³ãïŒã`useEffect`ããã¯ïŒé¢æ°ã³ã³ããŒãã³ãïŒã䌎ããŸããããããã®ã¢ãããŒãã¯æ©èœçã§ãããç¹ã«è€æ°ã®ããŒã¿äŸåé¢ä¿ãè€éãªããŒãã£ã³ã°ç¶æ ãæ±ãéã«ã¯ãåé·ã§è€éãªã³ãŒãã«ãªããã¡ã§ãã`use`ããã¯ã¯ãããç°¡æœã§çŽæçãªAPIãæäŸããããšã§ããããã®èª²é¡ã«å¯ŸåŠããããšãç®æããŠããŸãã
`use`ããã¯ã䜿çšããäž»ãªå©ç¹
- ããŒã¿ååŸã®ç°¡çŽ åïŒ `use`ããã¯ã«ãããã³ã³ããŒãã³ãå ã§çŽæ¥Promiseããawaitãã§ããããã«ãªããããŒãã£ã³ã°ããšã©ãŒç¶æ ã®ããã®`useEffect`ãæåã®ç¶æ 管çãäžèŠã«ãªããŸãã
- ã³ãŒãã®å¯èªæ§åäžïŒ å®åçãªã³ãŒããåæžããããšã§ã`use`ããã¯ã¯ã³ã³ããŒãã³ããèªã¿ããããçè§£ããããããä¿å®æ§ãšå ±åäœæ¥ãåäžãããŸãã
- ããã©ãŒãã³ã¹ã®åäžïŒ `use`ããã¯ã¯Reactã®Suspenseæ©èœãšã·ãŒã ã¬ã¹ã«çµ±åãããããå¹ççãªã¬ã³ããªã³ã°ãå¯èœã«ãããŠãŒã¶ãŒã®äœæããã©ãŒãã³ã¹ãåäžãããŸãã
- 宣èšçãªã¢ãããŒãïŒ `use`ããã¯ã¯ãã宣èšçãªããã°ã©ãã³ã°ã¹ã¿ã€ã«ãä¿é²ããããŒã¿ååŸã®è€éãªè©³çްã管çããã®ã§ã¯ãªããæãŸããçµæãèšè¿°ããããšã«éäžã§ããŸãã
- ãµãŒããŒã³ã³ããŒãã³ããšã®äºææ§ïŒ `use`ããã¯ã¯ãããŒã¿ååŸãäž»èŠãªé¢å¿äºã§ãããµãŒããŒã³ã³ããŒãã³ãã«ç¹ã«é©ããŠããŸãã
`use`ããã¯ã®ä»çµã¿ïŒå®è·µçãªäŸ
å®è·µçãªäŸã§`use`ããã¯ã説æããŸããããAPIãããŠãŒã¶ãŒããŒã¿ãååŸããã³ã³ããŒãã³ãã«è¡šç€ºããå¿ èŠããããšããŸãã
åŸæ¥ã®ã¢ãããŒãïŒ`useEffect`ã䜿çšïŒ
`use`ããã¯ãç»å Žããåã¯ã`useEffect`ããã¯ã䜿ã£ãŠããŒã¿ãååŸããããŒãã£ã³ã°ç¶æ ã管çããŠãããããããŸããïŒ
import React, { useState, useEffect } from 'react';
function UserProfile({ userId }) {
const [user, setUser] = useState(null);
const [isLoading, setIsLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
async function fetchData() {
try {
const response = await fetch(`/api/users/${userId}`);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
setUser(data);
} catch (error) {
setError(error);
} finally {
setIsLoading(false);
}
}
fetchData();
}, [userId]);
if (isLoading) {
return ãŠãŒã¶ãŒããŒã¿ãèªã¿èŸŒã¿äž...
;
}
if (error) {
return ãŠãŒã¶ãŒããŒã¿ã®ååŸäžã«ãšã©ãŒãçºçããŸãã: {error.message}
;
}
return (
{user.name}
Email: {user.email}
);
}
export default UserProfile;
ãã®ã³ãŒãã¯æ©èœããŸãããããŒãã£ã³ã°ããšã©ãŒãããŒã¿ç¶æ ã管çããããã«ããªãã®éã®å®åã³ãŒããå«ãŸããŠããŸãããŸãã`useEffect`ããã¯å ã§ã®æ éãªäŸåé¢ä¿ã®ç®¡çãå¿ èŠã§ãã
`use`ããã¯ã䜿çšãã
ã§ã¯ã`use`ããã¯ããã®ããã»ã¹ãã©ã®ããã«ç°¡çŽ åãããèŠãŠã¿ãŸãããïŒ
import React from 'react';
async function fetchUser(userId) {
const response = await fetch(`/api/users/${userId}`);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.json();
}
function UserProfile({ userId }) {
const user = use(fetchUser(userId));
return (
{user.name}
Email: {user.email}
);
}
export default UserProfile;
`use`ããã¯ã䜿ãããšã§ãã³ãŒããã©ãã»ã©ã¯ãªãŒã³ã§ç°¡æœã«ãªããã«æ³šç®ããŠãã ãããã³ã³ããŒãã³ãå ã§çŽæ¥`fetchUser`ãããã¹ããawaitãããŸããReactã¯Suspenseã䜿çšããŠãè£åŽã§èªåçã«ããŒãã£ã³ã°ãšãšã©ãŒç¶æ ãåŠçããŸãã
éèŠïŒ`use`ããã¯ã¯ã`Suspense`ããŠã³ããªã§ã©ãããããã³ã³ããŒãã³ãå ã§åŒã³åºãå¿ èŠããããŸããããã«ãããReactã¯ãããã¹ã解決ããããŸã§ã®ããŒãã£ã³ã°ç¶æ ã®åŠçæ¹æ³ãææ¡ããŸãã
import React from 'react';
function App() {
return (
èªã¿èŸŒã¿äž...}>
);
}
export default App;
ãã®äŸã§ã¯ã`Suspense`ã³ã³ããŒãã³ãã®`fallback`ããããã£ãã`UserProfile`ã³ã³ããŒãã³ããããŒã¿ãèªã¿èŸŒãã§ããéã«äœã衚瀺ããããæ±ºå®ããŸãã
`use`ããã¯ã®æ·±æã
Suspenseãšã®çµ±å
`use`ããã¯ã¯Reactã®Suspenseæ©èœãšå¯æ¥ã«çµ±åãããŠããŸããSuspenseã¯ãéåææäœãå®äºããã®ãåŸ ã€éãã¬ã³ããªã³ã°ããäžæåæ¢ãããããšãå¯èœã«ããŸãã`use`ããã¯ã䜿çšããã³ã³ããŒãã³ããä¿çäžã®ãããã¹ã«ééãããšãReactã¯ãã®ã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ãäžæåæ¢ãããããã¹ã解決ããããŸã§ïŒ`Suspense`ããŠã³ããªã§æå®ãããïŒãã©ãŒã«ããã¯UIã衚瀺ããŸãããããã¹ã解決ããããšãReactã¯ååŸããããŒã¿ã§ã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ãåéããŸãã
ãšã©ãŒãã³ããªã³ã°
`use`ããã¯ã¯ãšã©ãŒãã³ããªã³ã°ãç°¡çŽ åããŸãã`use`ããã¯ã«æž¡ããããããã¹ãæåŠããããšãReactã¯ãšã©ãŒããã£ããããæãè¿ããšã©ãŒããŠã³ããªïŒReactã®ãšã©ãŒããŠã³ããªæ©æ§ã䜿çšïŒã«äŒæãããŸããããã«ããããšã©ãŒãé©åã«åŠçãããŠãŒã¶ãŒã«æçãªãšã©ãŒã¡ãã»ãŒãžãæäŸã§ããŸãã
ãµãŒããŒã³ã³ããŒãã³ã
`use`ããã¯ã¯ReactãµãŒããŒã³ã³ããŒãã³ãã«ãããŠéèŠãªåœ¹å²ãæãããŸãããµãŒããŒã³ã³ããŒãã³ãã¯ãµãŒããŒäžã§ã®ã¿å®è¡ãããReactã³ã³ããŒãã³ãã§ãããã³ã³ããŒãã³ãå ã§çŽæ¥ããŒã¿ååŸãä»ã®ãµãŒããŒãµã€ãæäœãå®è¡ã§ããŸãã`use`ããã¯ã¯ãµãŒããŒã³ã³ããŒãã³ããšã¯ã©ã€ã¢ã³ããµã€ãã³ã³ããŒãã³ãéã®ã·ãŒã ã¬ã¹ãªçµ±åãå¯èœã«ãããµãŒããŒã§ããŒã¿ãååŸããŠã¯ã©ã€ã¢ã³ãã³ã³ããŒãã³ãã«æž¡ããŠã¬ã³ããªã³ã°ããããšãã§ããŸãã
`use`ããã¯ã®ãŠãŒã¹ã±ãŒã¹
`use`ããã¯ã¯ã以äžãå«ãå¹ åºããŠãŒã¹ã±ãŒã¹ã«ç¹ã«é©ããŠããŸãïŒ
- APIããã®ããŒã¿ååŸïŒ REST APIãGraphQLãšã³ããã€ã³ãããŸãã¯ä»ã®ããŒã¿ãœãŒã¹ããã®ããŒã¿ååŸã
- ããŒã¿ããŒã¹ã¯ãšãªïŒ ã³ã³ããŒãã³ãå ã§çŽæ¥ããŒã¿ããŒã¹ã¯ãšãªãå®è¡ããïŒç¹ã«ãµãŒããŒã³ã³ããŒãã³ãã§ïŒã
- èªèšŒãšèªå¯ïŒ ãŠãŒã¶ãŒã®èªèšŒç¶æ ãååŸããèªå¯ããžãã¯ã管çããã
- ãã£ãŒãã£ãŒãã©ã°ïŒ ç¹å®ã®æ©èœãæå¹ãŸãã¯ç¡å¹ã«ããããã®ãã£ãŒãã£ãŒãã©ã°èšå®ã®ååŸã
- åœéåïŒi18nïŒïŒ åœéåãããã¢ããªã±ãŒã·ã§ã³ã®ããã«ããã±ãŒã«åºæã®ããŒã¿ãèªã¿èŸŒããäŸãã°ããŠãŒã¶ãŒã®ãã±ãŒã«ã«åºã¥ããŠãµãŒããŒãã翻蚳ãååŸããã
- èšå®ã®èªã¿èŸŒã¿ïŒ ãªã¢ãŒããœãŒã¹ããã¢ããªã±ãŒã·ã§ã³ã®èšå®ãèªã¿èŸŒãã
`use`ããã¯ã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
`use`ããã¯ã®å©ç¹ãæå€§éã«æŽ»çšããæœåšçãªèœãšã穎ãé¿ããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠãã ããïŒ
- ã³ã³ããŒãã³ãã`Suspense`ã§ã©ããããïŒ ããŒã¿ã®èªã¿èŸŒã¿äžã«ãã©ãŒã«ããã¯UIãæäŸããããã«ã`use`ããã¯ã䜿çšããã³ã³ããŒãã³ãã¯åžžã«`Suspense`ããŠã³ããªã§ã©ããããŠãã ããã
- ãšã©ãŒããŠã³ããªã䜿çšããïŒ ããŒã¿ååŸäžã«çºçããå¯èœæ§ã®ãããšã©ãŒãé©åã«åŠçããããã«ããšã©ãŒããŠã³ããªãå®è£ ããŠãã ããã
- ããŒã¿ååŸãæé©åããïŒ ããŒã¿ååŸã®ããã©ãŒãã³ã¹ãæé©åããããã«ããã£ãã·ã³ã°æŠç¥ãããŒã¿æ£èŠåæè¡ãæ€èšããŠãã ããã
- éå°ãªååŸãé¿ããïŒ ç¹å®ã®ã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããããã«å¿ èŠãªããŒã¿ã®ã¿ãååŸããŠãã ããã
- ãµãŒããŒã³ã³ããŒãã³ããæ€èšããïŒ ããŒã¿ååŸãšãµãŒããŒãµã€ãã¬ã³ããªã³ã°ã®ããã«ãµãŒããŒã³ã³ããŒãã³ãã®å©ç¹ãæ¢æ±ããŠãã ããã
- 詊éšçã§ããããšãå¿ããªãïŒ `use`ããã¯ã¯çŸåšè©Šéšçã§ããã倿Žãããå¯èœæ§ããããŸããå°æ¥ã®APIã®æŽæ°ã倿Žã«åããŠãã ããã
æœåšçãªæ¬ ç¹ãšèæ ®äºé
`use`ããã¯ã¯å€§ããªå©ç¹ãæäŸããŸãããæœåšçãªæ¬ ç¹ãèæ ®äºé ãèªèããããšãéèŠã§ãïŒ
- 詊éšçãªã¹ããŒã¿ã¹ïŒ `use`ããã¯ã¯ãŸã 詊éšçã§ãããå°æ¥ã®Reactã®ããŒãžã§ã³ã§APIã倿Žãããå¯èœæ§ããããŸãã
- åŠç¿æ²ç·ïŒ `use`ããã¯ãšSuspenseãšã®çµ±åãçè§£ããã«ã¯ããããã®æŠå¿µã«äžæ £ããªéçºè ã«ãšã£ãŠåŠç¿æ²ç·ãå¿ èŠã«ãªãå ŽåããããŸãã
- ãããã°ã®è€éãïŒ ããŒã¿ååŸãšSuspenseã«é¢é£ããåé¡ã®ãããã°ã¯ãåŸæ¥ã®ã¢ãããŒããããè€éã«ãªãå¯èœæ§ããããŸãã
- éå°ååŸã®å¯èœæ§ïŒ `use`ããã¯ã®äžæ³šæãªäœ¿çšã¯ãããŒã¿ã®éå°ååŸã«ã€ãªãããããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
- ãµãŒããŒãµã€ãã¬ã³ããªã³ã°ã®èæ ®äºé ïŒ ãµãŒããŒã³ã³ããŒãã³ãã§`use`ã䜿çšããå Žåãã¢ã¯ã»ã¹ã§ãããã®ã«ç¹å®ã®å¶çŽããããŸãïŒäŸïŒãã©ãŠã¶APIã¯å©çšã§ããŸããïŒã
å®äžçã®äŸãšã°ããŒãã«ãªå¿çš
`use`ããã¯ã®å©ç¹ã¯ãããŸããŸãªã°ããŒãã«ã·ããªãªã§é©çšå¯èœã§ãïŒ
- Eã³ããŒã¹ãã©ãããã©ãŒã ïŒã°ããŒãã«ïŒïŒ ã°ããŒãã«ãªEã³ããŒã¹ãã©ãããã©ãŒã ã¯ã`use`ããã¯ã䜿çšããŠãç°ãªãå°åãã補å詳现ããŠãŒã¶ãŒã¬ãã¥ãŒãããŒã«ã©ã€ãºãããäŸ¡æ Œæ å ±ãå¹ççã«ååŸã§ããŸããSuspenseã¯ãå Žæããããã¯ãŒã¯é床ã«é¢ä¿ãªãããŠãŒã¶ãŒã«ã·ãŒã ã¬ã¹ãªèªã¿èŸŒã¿äœéšãæäŸã§ããŸãã
- æ è¡äºçŽãµã€ãïŒåœéïŒïŒ åœéçãªæ è¡äºçŽãµã€ãã¯ã`use`ããã¯ã掻çšããŠããã©ã€ãã®ç©ºãç¶æ³ãããã«æ å ±ãçºæ¿ã¬ãŒãããªã¢ã«ã¿ã€ã ã§ååŸã§ããŸãããšã©ãŒããŠã³ããªã¯APIã®é害ãé©åã«åŠçãããŠãŒã¶ãŒã«ä»£æ¿ãªãã·ã§ã³ãæäŸã§ããŸãã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ïŒå šäžçïŒïŒ ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ã¯ã`use`ããã¯ã䜿çšããŠãŠãŒã¶ãŒãããã¡ã€ã«ãæçš¿ãã³ã¡ã³ããååŸã§ããŸãããµãŒããŒã³ã³ããŒãã³ãã䜿çšããŠãµãŒããŒäžã§ã³ã³ãã³ããäºåã¬ã³ããªã³ã°ããã€ã³ã¿ãŒãããæ¥ç¶ãé ããŠãŒã¶ãŒã®åæèªã¿èŸŒã¿æéãæ¹åã§ããŸãã
- ãªã³ã©ã€ã³æè²ãã©ãããã©ãŒã ïŒå€èšèªïŒïŒ ãªã³ã©ã€ã³æè²ãã©ãããã©ãŒã ã¯ã`use`ã䜿çšããŠããŠãŒã¶ãŒã®èšèªèšå®ã«åºã¥ããŠã³ãŒã¹ã³ã³ãã³ããåŠçã®é²æããŒã¿ãããŒã«ã©ã€ãºããã翻蚳ãåçã«èªã¿èŸŒãããšãã§ããŸãã
- éèãµãŒãã¹ã¢ããªã±ãŒã·ã§ã³ïŒã°ããŒãã«ïŒïŒ ã°ããŒãã«ãªéèã¢ããªã±ãŒã·ã§ã³ã¯ã`use`ã䜿çšããŠãªã¢ã«ã¿ã€ã ã®æ ªäŸ¡ãé貚æç®ããŠãŒã¶ãŒã¢ã«ãŠã³ãæ å ±ãååŸã§ããŸããç°¡çŽ åãããããŒã¿ååŸã¯ãç°ãªãã¿ã€ã ãŸãŒã³ãèŠå¶ç°å¢ã®ãŠãŒã¶ãŒã«å¯ŸããŠããŒã¿ã®äžè²«æ§ãšå¿çæ§ã確ä¿ããã®ã«åœ¹ç«ã¡ãŸãã
Reactã«ãããããŒã¿ååŸã®æªæ¥
`use`ããã¯ã¯ãReactã«ãããããŒã¿ååŸã®é²åã«ãããéèŠãªäžæ©ã衚ããŠããŸããéåæããŒã¿åŠçãç°¡çŽ åãããã宣èšçãªã¢ãããŒããä¿é²ããããšã§ã`use`ããã¯ã¯éçºè ãããå¹ççã§ãä¿å®å¯èœã§ã髿§èœãªReactã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããåãäžããŸããReactããŒã ã`use`ããã¯ãæ¹è¯ããé²åããç¶ããã«ã€ããŠãããã¯ãã¹ãŠã®Reactéçºè ã®ããŒã«ãããã«äžå¯æ¬ ãªããŒã«ã«ãªãã§ãããã
ããã¯è©Šéšçãªæ©èœã§ããããšã念é ã«çœ®ãã`use` APIã®å€æŽãæŽæ°ã«ã€ããŠã¯ReactããŒã ã®çºè¡šããã©ããŒããŠãã ããã
çµè«
Reactã®è©Šéšçãª`use`ããã¯ã¯ãReactã³ã³ããŒãã³ãã§ã®ãªãœãŒã¹ååŸãšäŸåé¢ä¿ç®¡çãæ±ãããã®åŒ·åã§çŽæçãªæ¹æ³ãæäŸããŸãããã®æ°ããã¢ãããŒããåãå ¥ããããšã§ãã³ãŒãã®å¯èªæ§ã®åäžãããã©ãŒãã³ã¹ã®åŒ·åããããŠãã宣èšçãªéçºäœéšãå®çŸã§ããŸãã`use`ããã¯ã¯ãŸã 詊éšçã§ãããReactã«ãããããŒã¿ååŸã®æªæ¥ã象城ããŠããããã®æœåšçãªå©ç¹ãçè§£ããããšã¯ãçŸä»£çã§ã¹ã±ãŒã©ãã«ããã€é«æ§èœãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšãããã¹ãŠã®éçºè ã«ãšã£ãŠäžå¯æ¬ ã§ãã`use`ããã¯ãšSuspenseã«é¢ããææ°ã®æŽæ°æ å ±ããã¹ããã©ã¯ãã£ã¹ã«ã€ããŠã¯ãå ¬åŒã®Reactããã¥ã¡ã³ããã³ãã¥ããã£ãªãœãŒã¹ãåç §ããããšãå¿ããªãã§ãã ããã